package yu.com.time

import yu.com.time.calclator.TimeCalculator
import yu.com.time.unit.TimeUnit
import java.sql.Time


/**
 * 对Time进行拓展
 * created zpf on 2018/10/23 0023
 */


/**
 * 构造一个当前时间对象
 */
fun Time(): Time = java.sql.Time(System.currentTimeMillis())

/**
 * 构造时间
 * @param timeStr 时间字符串
 * @param pattern  格式,可空,默认:yyyy-MM-dd HH:mm:ss.SSS
 */
fun Time(timeStr: String, pattern: String = "HH:mm:ss.SSS"): Time = DateTimes.parse(timeStr, pattern).toTime()

/**
 * 设置时间部分
 * @param hour 设置小时部分,默认置为0，如果填写null则不改变
 * @param minute 设置分钟部分,默认置为0，如果填写null则不改变
 * @param second 设置秒部分,默认置为0，如果填写null则不改变
 * @param milli 设置毫秒部分,默认置为0，如果填写null则不改变
 */
fun Time.withTime(hour: Int? = 0, minute: Int? = 0, second: Int? = 0, milli: Int? = 0): Time {
    return toLocalTime().withTime(hour, minute, second, milli?.let { it * 1000 * 1000 }).toTime()
}

/**小时计算*/
val Time.cHour get() = TimeCalculator(this, TimeUnit.HOUR)

/**分钟计算*/
val Time.cMinute get() = TimeCalculator(this, TimeUnit.MINUTE)

/**秒钟计算*/
val Time.cSecond get() = TimeCalculator(this, TimeUnit.SECOND)

/**毫秒计算*/
val Time.cMilli get() = TimeCalculator(this, TimeUnit.MILLI)